package org.hq;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Collections;

/**
 * mysql 代码生成器
 */
@SpringBootTest
public class CodeGenerator {
    /**
     * sql代码生成
     */
    @Test
    public void newsql() {

        String outputDir = System.getProperty("user.dir") + "/src/main.cpp/java";// 指定输出
        // 生成路径
        String mapper = System.getProperty("user.dir") + "/src/main.cpp/resources/mapper";
        String mysqlUrl = "jdbc:mysql://192.168.2.250:3306/video?characterEncoding=utf-8&useSSL=false";
        String use = "root";
        String password = "1813033378";
        FastAutoGenerator.create(mysqlUrl, use, password)
                .globalConfig(builder -> {
                    builder
                            .disableOpenDir() // 允许自动打开输出目录
                            .author("av 视频数据库")// 设置作者
                            .commentDate("yyyy-MM-dd") // 注释日期
                            .dateType(DateType.ONLY_DATE)
                            .outputDir(outputDir); // 输出目录
                })

                .packageConfig(builder -> {
                    builder.parent("org.hq.sql") // 设置父包名
                            .entity("entity") // 设置实体类包名
                            .mapper("mapper") // 设置 Mapper 接口包名
                            .service("iservice") // 设置 Service 接口包名
                            .serviceImpl("impl") // 设置 Service 实现类包名
                            // 设置 Mapper XML 文件包名
                            .xml("mapper")
                            .controller("controller") // 设置 Controller 包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, mapper)); // 设置mapperXml生成路径

                })
                .strategyConfig(builder -> {
                    builder.addInclude("web_name",
                                    "host_web",
                                    "groups_video",
                                    "video_message",
                                    "user") // 设置需要生成的表名
                            .entityBuilder()//设置实体类模板
                            .enableLombok() // 启用 Lombok
                            .enableFileOverride() //覆盖已生成文件
                            .enableTableFieldAnnotation() // 启用字段注解
                            .mapperBuilder() // mapper策略配置
                            .enableMapperAnnotation() //注解开启
                            .serviceBuilder() //设置 Service 层模板
                            .disableService() //
                            .controllerBuilder()
                            .disable();

                })


                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 模板引擎
                .execute(); // 执行生成
    }

}
